package chwgigs;

public class J14_Array {

	// 배열 Array
	// 지금 까지 우리가 사용한 변수는 하나의 저장 공간에 하나의 이름으로 하나의 값만을 저장했다.
	// 만일, 데이터 건수가 여러 개인 경우에 변수도 여러개 선언해서 사용해야 했다.
	// 학생 1명의 성적처리: 변수 7개 사용
	// 학생 10명의 성적처리: 변수 7*10개 사용 해야 하는 등 너무 변수가 많아 진다. 이것은 코드 작성에 힘이 든다
	// 이렇게 하면 작성해야 하는 코드도 많아지고
	// 반복문 사용도 힘들어 짐

	// 자바에서는 동일한 자료형의 객체나 기본자료 형을 묶어서(group) 배열로 사용 할 수 있음
	// 배열에 속하는 각 개체는 "배열의 구성요소" 라 함
	// 배열에서 구성요소의 갯수를 알아내려면 length 필드를 이용 한다
	// 배열의 각 구성요소에 값을 저장하거나 읽기 위해 접근하려면 index(위치) 를 지정해야 한다.
	// 배열의 index는 0부터 시작한다. 그리고 배열은 일단 크기가 정해지면 변경이 불가 한다.

	public static void main(String[] args) {
		// 배열을 사용하지 않은 성적처리 프로그램
		int st1 = 123456789; // 학생번호
		int kor1 = 98;
		int eng1 = 99;
		int mat1 = 98;

		int st2 = 123456789; // 학생번호
		int kor2 = 98;
		int eng2 = 99;
		int mat2 = 98;

		int st3 = 123456789; // 학생번호
		int kor3 = 98;
		int eng3 = 99;
		int mat3 = 98;

		int tot1 = kor1 + kor2 + kor2;
		int tot2 = kor2 + eng2 + mat2;
		int tot3 = kor3 + eng3 + mat3;

		// 배열을 사용한 성적처리 프로그램
		int[] stdno = new int[3]; // 3명분의 학생 번호
		int[] kor = new int[3];
		int[] eng = new int[3];
		int[] mat = new int[3];

		// 배열의 구성요소에 값 저장
		stdno[0] = 123456789;
		stdno[1] = 234567890;
		stdno[2] = 345678901;

		System.out.println(stdno);
		System.out.println(stdno[0]);
		System.out.println(stdno[1]);
		System.out.println(stdno[2]);

		for (int s : stdno)
			System.out.println(s);

		kor[0] = 98;
		kor[1] = 97;
		kor[2] = 96;
		System.out.println(kor);
		System.out.println(kor[0]);
		System.out.println(kor[1]);
		System.out.println(kor[2]);

		for (int k : kor) {
			System.out.println(k);
		}

		eng[0] = 99;
		eng[1] = 95;
		eng[2] = 93;
		System.out.println(eng);
		System.out.println(eng[0]);
		System.out.println(eng[1]);
		System.out.println(eng[2]);
		for (int e : eng) {
			System.out.println(e);
		}
		mat[0] = 96;
		mat[1] = 91;
		mat[2] = 92;
		System.out.println(mat);
		System.out.println(mat[0]);
		System.out.println(mat[1]);
		System.out.println(mat[2]);
		for (int m : mat) {
			System.out.println(m);
		}

		int[] tot = new int[3];
		/*
		 * tot[0]=kor[0]+eng[0]+mat[0]; tot[1]=kor[1]+eng[1]+mat[1];
		 * tot[2]=kor[2]+eng[2]+mat[2];
		 */

		for (int i = 0; i <= 2; ++i) {
			tot[i] = kor[i] + eng[i] + mat[i];
		}

		System.out.println(tot);
		System.out.println(tot[0]);
		System.out.println(tot[1]);
		System.out.println(tot[2]);

		// 문제 1: 복권 추첨을 위한 난수 6개 만들어 mylotto라는 배열에 저장하고 모두 출력
		// 로또 6/45 에 근거해서 1-45범위내 난수 사용

		int[] num = new int[6];
		System.out.print("행운의 번호=");
		for (int j = 0; j <= 5; ++j) {
			num[j] = (int) (Math.random() * 45) + 1;
			System.out.print(num[j] + "   ");
		}
		System.out.println();// 한칸 띄기 위한 것

		for (int n : num) {
			System.out.println(n);
		}

		int[] num2 = new int[9];
		for (int k = 0; k <= 8; ++k) {
			num2[k] = (int) (Math.random() * 100) + 1;

			System.out.print(num2[k] + "  ");

		}

		int[] num3 = new int[10];
		for (int g = 0; g <= 9; ++g) {
			num3[g] = (int) (Math.random() * 71) + 1;
			System.out.println(num3[g]);
		}

		// 배열 선언 및 값 초기화
		char[] grade = { '수', '우', '미', '양', '가' };
		// char [] grade= new char[5];
		// grade[0]='수'
		// grade[1]='우'
		// grade[2]='미'
		// grade[3]='양'
		// grade[4]='가'
		for (int i = 0; i < grade.length; ++i) {
			System.out.print(grade[i] + "   ");
		}

		System.out.println();

		for (int f = 0; f < grade.length; ++f) {
			System.out.print(grade[f] + "    ");
		}

		// Iterating on Array
		// JDK 5 이전에서는 for 문과 배열의 index를 이용해서 배열의 값을 출력했다
		// JDK 5이상에서는 for 문이 향상되었다.
		// 즉, 배열의 index 없이 배열을 반복처리 가능
		// for( 배열의 구성요소 자료형: 배열명)

		for (char g : grade)
			// for (배열의 구성요소 자료형 : 배열명 ){
			//
			// }
			System.out.print(g);// 간단히 해결된다.

	}// CLASS

}
